package cn.itcast.controller;

import cn.hutool.json.JSON;
import cn.hutool.json.JSONUtil;
import cn.itcast.pojo.CheckGroup;
import cn.itcast.pojo.CheckItem;
import cn.itcast.pojo.Setmeal;
import cn.itcast.service.SetmealService;
import cn.itcast.vo.SetmealVo;
import com.alibaba.dubbo.config.annotation.Reference;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import lombok.SneakyThrows;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.freemarker.FreeMarkerTemplateUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URL;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


@RestController
@RequestMapping("/a")
public class NewsController  {

    @Reference
    private SetmealService setmealService;

    @GetMapping("/bbb")
    public void test() throws IOException {
        Setmeal setmeal = setmealService.findById(12);
        // 根据id查询出所有检查组
        List<CheckGroup> groupList = setmealService.findCheckgroupById(12);
        // 根据检查组id查询出所有检查项
        for (CheckGroup checkGroup : groupList) {
            List<CheckItem> checkItemList =  setmealService.findCheckitem(checkGroup.getId());
            //把所有检查项集合设置为checkGroup属性
            checkGroup.setCheckItems(checkItemList);
        }
        // 把检查组检查项设置为Setmeal属性 封装返回
        setmeal.setCheckGroups(groupList);

        // 创建配置类
        Configuration configuration = new Configuration(Configuration.getVersion());
        // 设置模板的上下文，以及加载模板的路径 （模板存放路径）
        String classpath = this.getClass().getResource("/").getPath();
        configuration.setDirectoryForTemplateLoading(new File(classpath + "/static/template"));
        // 设置模板的编码格式
        configuration.setDefaultEncoding("UTF-8");
        // 加载模板文件,获取模板对象
        Template template = configuration.getTemplate("setmeal_detail.ftl");
        // 获取项目的根目录
        // String basePath = req.getServletContext().getRealPath("/");
        File htmlFile = new File(classpath + "/html");
        System.out.println(htmlFile.getAbsolutePath());
        // 判断文件目录是否存在
        if (!htmlFile.exists()) {
            // 如果文件不存在
            htmlFile.mkdir();
        }
        // 得到生成的文件名 （生成随机不重复的文件名）
        String fileName = System.currentTimeMillis() + ".html";
        System.out.println(fileName);
        // 创建html文件
        File file = new File(htmlFile, fileName);
        // 获取文件输出流
        FileWriter writer = new FileWriter(file);

        // 生成html(将数据模型填充到模板中)
        Map<String, Object> map = new HashMap<>();

        map.put("setmeal",JSONUtil.toJsonStr(setmeal));
        map.put("imgUrl", setmeal.getImg());
        try {
            template.process(map, writer);
        } catch (TemplateException e) {
            e.printStackTrace();
        } finally {
            // 关闭资源
            writer.flush();
            writer.close();
        }
    }




    @GetMapping("/b")
    protected void dosome(HttpServletRequest req, HttpServletResponse resp) throws IOException {

        // 创建配置类
        Configuration configuration = new Configuration(Configuration.getVersion());
        // 设置模板的上下文，以及加载模板的路径 （模板存放路径）
        String classpath = this.getClass().getResource("/").getPath();
        configuration.setDirectoryForTemplateLoading(new File(classpath + "/static/template"));
//         configuration.setServletContextForTemplateLoading();
        // 用类加载器获取模板文件的路径
        // String templateFileName = NewsController.class.getClassLoader().getResource("static/template/news.ftl").getPath().substring(1);
        // 设置模板的编码格式
        configuration.setDefaultEncoding("UTF-8");
        // 加载模板文件,获取模板对象
        Template template = configuration.getTemplate("news.ftl");

        // 设置数据模型
        Map<String, Object> map = new HashMap<>();
        map.put("title", "这是标题");
        map.put("source", "这是资源");
        map.put("pubTime", "2020-01-01");
        map.put("content", "这是文本");
        System.out.println(map);

        // 获取项目的根目录
        // String basePath = req.getServletContext().getRealPath("/");
        File htmlFile = new File(classpath + "/html");
        System.out.println(htmlFile.getAbsolutePath());
        // 判断文件目录是否存在
        if (!htmlFile.exists()) {
            // 如果文件不存在
            htmlFile.mkdir();
        }
        // 得到生成的文件名 （生成随机不重复的文件名）
        String fileName = System.currentTimeMillis() + ".html";
        System.out.println(fileName);
        // 创建html文件
        File file = new File(htmlFile, fileName);
        // 获取文件输出流
        FileWriter writer = new FileWriter(file);

        // 生成html(将数据模型填充到模板中)
        try {
            template.process(map, writer);
        } catch (TemplateException e) {
            e.printStackTrace();
        } finally {
            // 关闭资源
            writer.flush();
            writer.close();
        }
    }

}